
package com.jf.cloud.multishop.mapper;

import com.jf.cloud.multishop.bo.mongo.MongoShopWalletLogBO;
import com.jf.cloud.multishop.dto.ShopWalletLogSearchDTO;
import com.jf.cloud.multishop.model.ShopWallet;
import com.jf.cloud.multishop.vo.ShopWalletVO;
import com.jf.cloud.multishop.vo.ShopWalletZoneInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 商家钱包信息
 *
 * @author zz
 * @date 2021-01-07 16:41:03
 */
public interface ShopWalletMapper {

    /**
     * 根据店铺ids获取商家钱包信息列表
     *
     * @param shopIds 店铺ids
     * @return 商家钱包信息列表
     */
    List<ShopWalletVO> listByShopIds(@Param("shopIds") List<Long> shopIds);

    /**
     * 保存商家钱包信息
     *
     * @param shopWallet 商家钱包信息
     */
    void save(@Param("shopWallet") ShopWallet shopWallet);

    /**
     * 更新商家钱包信息
     *
     * @param shopWallet 商家钱包信息
     * @return int
     */
    int update(@Param("shopWallet") ShopWallet shopWallet);

    /**
     * 根据店铺id获取钱包信息
     *
     * @param shopId 店铺id
     * @return 钱包信息
     */
    ShopWalletVO getByShopId(@Param("shopId") Long shopId);

    /**
     * 给商家钱包，添加未结算金额
     *
     * @param shopId
     * @param changeAmount
     * @return
     */
    int addUnsettledAmount(@Param("shopId") Long shopId, @Param("changeAmount") Long changeAmount);

    /**
     * 锁定未结算金额
     *
     * @param shopId
     * @param shopRealRefundAmount
     * @return
     */
    int subUnsettledAmount(@Param("shopId") Long shopId, @Param("shopRealRefundAmount") Long shopRealRefundAmount);

    /**
     * 进行结算
     * 添加结算金额可用金额、结算总金额
     *
     * @param shopId
     * @param settledAmount
     * @return
     */
    int addSettledAmount(@Param("shopId") Long shopId, @Param("settledAmount") Long settledAmount);

    /**
     * 给商家钱包，减少结算金额
     *
     * @param shopId
     * @param changeAmount
     * @return
     */
    int subSettledAmount(@Param("shopId") Long shopId, @Param("changeAmount") Long changeAmount);

//    /**
//     * 进行结算
//     * 添加结算金额可用金额、结算总金额，减少待结算金额
//     *
//     * @param shopId
//     * @param settledAmount
//     * @return
//     */
//    int settledAmount(@Param("shopId") Long shopId, @Param("settledAmount") Long settledAmount);

    /**
     * 提现申请的时候增加冻结金额
     *
     * @param shopId
     * @param changeAmount
     * @return
     */
    int addFreezeAmount(@Param("shopId") Long shopId, @Param("changeAmount") Long changeAmount);

    /**
     * 提现申请通过的时候/提现申请被拒绝的时候减少冻结金额
     *
     * @param shopId
     * @param changeAmount
     * @return
     */
    int subFreezeAmount(@Param("shopId") Long shopId, @Param("changeAmount") Long changeAmount);

    /**
     * 获取所有商家钱包信息
     *
     * @param shopWalletLogSearchDTO
     * @return 钱包信息
     */
    ShopWalletVO getAllShop(@Param("shopWalletLogSearchDTO") ShopWalletLogSearchDTO shopWalletLogSearchDTO);

    /**
     * 获取所有店铺的钱包信息
     *
     * @param shopWalletLogSearchDTO
     * @return
     */
    List<ShopWalletVO> listAllShopWallet(@Param("shopWalletLogSearchDTO") ShopWalletLogSearchDTO shopWalletLogSearchDTO);

    /**
     * 获取店铺余额,不含分片
     *
     * @param shopId 店铺id
     * @return
     */
    Long getSettlementAmountByShopId(@Param("shopId") Long shopId);

    /**
     * 根据分片数量获取店铺id列表
     *
     * @param zoneNum 分片数量
     * @return
     */
    List<Long> listShopIdsByZoneNum(@Param("zoneNum") int zoneNum);

    /**
     * 更新钱包分片数量和结算金额
     *
     * @param zoneNum      分成的数量
     * @param shopId       需要分片的店铺id
     * @param settleAmount 更新的结算金额
     */
    void updateZoneNum(@Param("zoneNum") int zoneNum, @Param("shopId") Long shopId, @Param("settleAmount") Long settleAmount);

    /**
     * 获取店铺钱包分片情况
     *
     * @param shopId
     * @return
     */
    ShopWalletZoneInfoVO getShopWalletZoneInfo(Long shopId);

    List<MongoShopWalletLogBO> setLog();

    List<MongoShopWalletLogBO> setScoreLog();
}
